Graph-Processing Techniques for a MapReduce Engine

ABSTRACT

Systems, methods, and devices for sorting and processing various types of graph data are described herein. Partitioning graph data into master data and associated slave data allows for sorting of the graph data by sorting the master data. In another embodiment, promoting a data bucket having a first data bucket size to a data bucket having a second data bucket size greater than the first data bucket size upon reaching a memory limit allows for the reduction of temporary files output by the data bucket.

BACKGROUND

Computer users, both in the business and home settings, utilize many different types of computing devices to send electronic mail, generate work product, and process data. A plurality of computing devices, networks, and/or systems may be needed to process large amounts of data related to these and other computer uses. Programming models, such as MapReduce, may be used to process and generate these large amounts of data.

Utilizing a MapReduce process, a user may cause a map function to process and partition data, such as a key/value pair, to generate a set of partitioned data. The partitioned data may then be distributed to one or more nodes so that the partitioned data may be processed separately and independently. Subsequently, a reduce function may serve to merge the processed and partitioned data in order to output a merged data record.

There are at least two general assumptions when large data sets are processed utilizing a MapReduce process. First, the amount of data distributed to each of the one or more nodes will be approximately the same. Furthermore, the data input into the MapReduce process will be in key-value format, meaning that such data will take up about the same size in the memory of a particular computing device. However, when the data input into the MapReduce process is in a graphical form, the foregoing assumptions may no longer be valid.

SUMMARY

Described herein are techniques for the processing and/or sorting of interrelated data, such as graphical data. In one embodiment, interrelated data items partitioned from input data are distributed into one of a plurality of data buckets each having a master container and a slave container. The partitioned interrelated data items in each data bucket are further divided into master data items to be held in the master container and corresponding slave data items to be held in the slave container. Each master data item may be associated with one or more slave data items. The master data items in each data bucket may then be processed and/or sorted so that the master data items and their corresponding slave data items are output as a temporary file. Subsequently, the temporary files generated by each of the data buckets may be merged together and output as a single data record.

In another embodiment, input data may be partitioned and distributed into a plurality of data buckets. Each of the data buckets may initially be designated as having a first data bucket size. As each of the data buckets reaches a maximum storage capacity, the data buckets may output the data as one or more temporary files. Further, if a particular data bucket reaches its maximum storage capacity a number of times, that data bucket may be promoted to a data bucket having a second data bucket size that is greater than the first data bucket size. As a result, the data bucket having a second, greater data bucket size may output a larger, reduced amount of temporary files.

In at least one embodiment, one or more computing devices may partition graph data to preserve a locality property. For instance, graph data associated with other graph data may be maintained in the same partition such that the data will be processed together.

This Summary is provided to introduce a selection of concepts in a simplified form that is further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.

BRIEF DESCRIPTION OF THE DRAWINGS

The detailed description is set forth with reference to the accompanying figures, in which the left-most digit of a reference number identifies the figure in which the reference number first appears. The use of the same reference numbers in the same or different figures indicates similar or identical items or features.

FIG. 1 illustrates a diagram showing the sorting of input data divided into master data items and associated slave data items, in accordance with various embodiments.

FIG. 2 illustrates a diagram showing the promoting of a data bucket having a first data bucket size to a data bucket having a second data bucket size greater than the first data bucket size based on reaching a maximum storage capacity a number of times, in accordance with various embodiments.

FIG. 3 illustrates a diagram showing the partitioning of graph data to preserve a locality property, in accordance with various embodiments.

FIG. 4 illustrates a flowchart showing the sorting of data by dividing input data into master data items and associated slave data items, in accordance with various embodiments.

FIG. 5 illustrates a flowchart showing the sorting and promoting of a data bucket having a first data bucket size to a data bucket having a second data bucket size, in accordance with various embodiments.

FIG. 6 illustrates a flowchart showing the sorting and merging graph data, in accordance with various embodiments.

FIG. 7 is a block diagram that illustrates a representative computing device that may implement the graph-processing techniques described herein, in accordance with various embodiments.

DETAILED DESCRIPTION

Described herein are techniques for processing and sorting interrelated data, such as graph data. Each record in the graph data may have a structure containing a plurality of source nodes and destination nodes. Although the source nodes of a particular graph record may be of a fixed size, the number of destination nodes for each graph record may be large. Accordingly, when processing one or more graph records, it may be difficult to sort the data due to the number of source nodes and associated destination nodes. For instance, a single graph record may contain five source nodes and each source node may also have a plurality of associated destination nodes that are either different or the same from destination nodes associated with the other source nodes. Therefore, to sort the foregoing graph record, the graph record may be divided into master data items corresponding to the source nodes and slave data items corresponding to the destination nodes. As the associated destination nodes are known for each source node, the entire graph record may be sorted by sorting the master data items without sorting the associated slave data items.

Also described herein are techniques for managing the processing of graph data in one or more data buckets. As data is distributed into one or more data buckets and a particular data bucket reaches its memory capacity, the data bucket may output or distribute the data to memory. Thus, the memory capacity of the data bucket may determine the amount of data output to memory. As mentioned previously, due to the variance in size of partitioned graph data, certain data buckets may reach maximum memory capacity before other data buckets. Therefore, assuming that the data buckets each have the same data bucket size, it follows that data buckets that receive greater amounts of graph data may likely generate and output a greater number of temporary files. To reduce the number of temporary files that may later be merged with temporary files output by other data buckets, a particular data bucket having a first size that reaches its memory capacity a predetermined number of times may be promoted to a data bucket having a second, greater size. Thus, since the size of the data bucket has increased, that particular data bucket may generate and output larger, but fewer, temporary files.

Various examples for sorting and processing data in accordance with the embodiments are described below with reference to FIGS. 1-7.

FIG. 1 illustrates a diagram for the sorting and processing of data. In various embodiments, the processing begins with data input 102, which may be any type of data, including interrelated data such as graph data. Subsequently, data input 102 may be divided or partitioned into extracted data 104. FIG. 1 illustrates that extracted data items 104 is shown as two different data records. However, any number of extracted data items 104 is contemplated. In an embodiment in which input data 102 comprises graph data, the graph data may be divided or partitioned into extracted data 104 by a MapReduce engine, which may comprise one or more graph records. Each graph record may be comprised of one or more source nodes and a plurality of destination nodes, with each source node being associated with one or more destination nodes of the graph record. As the source nodes and destination nodes are associated with one another, this data may be referred to as interrelated data items. Accordingly, each source node may have one or multiple associated destination nodes and two different source nodes may have the same or different destination nodes. The source nodes in a particular graph record may be fixed. On the other hand, the number of destination nodes for different graph records may vary greatly. For instance, a source node in data record A may have 3 associated destination nodes whereas a source node in data record B may have 15 associated destination nodes. Therefore, the size of each graph record may vary.

In various embodiments, the interrelated data items, represented by extracted data 104, are directed into mapper 106. Mapper 106 may be embodied in hardware, software, or a combination thereof. In the above embodiment, mapper 106 may include bucket judgment 108 and a plurality of data buckets 110. As shown, data bucket 110A is an example data bucket of data buckets 110. Each of data buckets 110, including data bucket 110A, may include a master container 112 and a slave container 114.

In the above embodiment, once extracted data 104 is directed into mapper 106, bucket judgment may distribute each set of interrelated data items into one of the plurality of data buckets 110, such as data bucket 110A. Subsequently, the interrelated data items in each of data buckets 110 may be divided or partitioned into master data items 116 and slave data items 118. The interrelated data items may be partitioned by a MapReduce engine and the master data items 116 and the associated slave data items 118 may be comprised of master data items 116 and associated slave data items 118, respectively. In data bucket 110A, the master data items 116 are held in master container 112 and the slave data items 118 associated with the master data items 116 are held in slave container 114. In various embodiments, each master data item 116 may have unidirectional control over its associated slave data items 118 and/or may be aware of the status of each slave data item 118. As shown in data bucket 110A, the lines extending from each master data item 116 in master container 112 to a subset of slave data items 118 in slave container 114 represent specific slave data items 118 associated with a particular master data item 116. Moreover, as mentioned previously, the master data items 116 and the associated slave data items 118 may comprise source nodes and associated destination nodes, respectively.

As stated above, the foregoing embodiment describes that the master container 112 may hold the master data items 116 and the slave container 114 may hold the corresponding slave data items 118. Furthermore, in each of data buckets 110, master container 116 includes one or more records. In the above embodiment, each record may serve as a wrapper for a particular master data item 116 whereby the wrapper may include information relating to that particular master data item 116. Such information may include an index and length of slave data items 118 in the slave container 114 associated with that particular master data item 116. That is, the wrapper describes information about the one or more slave data items 118 associated with a particular master data item 116.

After the master data items 116 and corresponding slave data items 118 are distributed into master container 112 and slave container 114, respectively, mapper 106 may proceed to sort and process the interrelated data items contained in each of data buckets 110. In one embodiment, both the master data items 116 and the corresponding slave data items 118 may be sorted together. However, in another embodiment, the master data items 116 in data buckets 110 may be sorted without processing or sorting the slave data items 118 corresponding to the master data items 116. Since each master data item 116 may be aware of its corresponding slave data items 118, it may not be necessary to sort the slave data items 118 in addition to the master data item 116. In other words, by sorting each master data item 116 in the master container 112 in data buckets 110 and 110A, mapper 106 is also sorting the associated slave data items 118 in slave container 114.

Furthermore, in an example embodiment, data input 102 may be any type of graph data and extracted data 104 may represent one or more graph records partitioned from the graph data. As stated above, the source nodes held in master container 112 may be sorted without sorting the associated destination nodes held in slave container 114. Therefore, in this embodiment, mapper 106 need not sort or process the slave data items 118, or destination nodes, provided that the master data items 116, or source nodes, of the graph record are sorted. In other words, the master-slave relationship between the source nodes and the associated destination nodes may allow for the sorting of just a portion of the graph record.

In some embodiments, after sorting master data items 116, each data bucket 110 may merge its master data items 116 and associated slave data items 118 into a single record. Subsequently, the single record for each of the data buckets 110 may be output as bucket output 120 such that each data bucket 110 has output a final bucket output 126. For instance, with respect to data bucket 110A, the bucket output 120 for data bucket 110A may include the sorted master data items 116 and its associated slave data items 118.

In one embodiment, each bucket output 120 may be sorted by source node identifiers. In this embodiment, each source node may be associated with and recognizable by a unique identifier. Accordingly, the final bucket output 126 for each data bucket 110 may be sorted such that each source node is followed by its associated destination nodes. That is, for example, if a particular data bucket contained multiple source nodes, the bucket output 120 may be sorted and ordered as follows: (1) source node having a first source node identifier, (2) destination nodes associated with first source node, (3) source node having a second source node identifier, (4) destination nodes associated with second source node, and so on.

In an exemplary embodiment, bucket output 120 for each of the data buckets 110 may then be input into reducer 122. Subsequently, the bucket outputs 120 for each of the data buckets 110 may be distributed into temporary data bucket 124. In this embodiment, temporary bucket 124 may sort each of the bucket outputs 120 and subsequently generate and output a final output 126. Final output 126 may represent data input 102 after it has been both sorted and processed.

In one embodiment, reducer 122 may reduce bucket outputs 120 into final output 126 utilizing the master-slave concept described above. More particularly, similarly to data bucket 110A, temporary data bucket 124 may include both a master container and a slave container. Further, once the bucket output 120 for each data bucket 110 has been directed to temporary data bucket 124, each bucket output 120 may be divided into master data items 116 and slave data items 118, with each slave data item 118 being associated with one or more master data items 116. As stated previously, provided that the bucket output 120 relates to a graph record, the source nodes and the associated destination nodes may be defined as the master data items 116 and the associated slave data items 118, respectively. Moreover, the master container, which may hold the master data items 116, may also include one or more records that represent a wrapper for a particular master data item 116.

In the foregoing embodiment, since the master data items 116 in the temporary data bucket 124 may have control over, or at least be aware of, its associated slave data items 118 held in the slave container of temporary data bucket 124, the reducer 122 may sort the master data items 116 without sorting the associated slave data items 118. The temporary data bucket 124 may then merge the master data items 116 and the associated slave data items 118 from each of the bucket outputs 120 in order to generate a single record. The single record may be sorted in any manner, such as by sorting the record by a source node identifier, as previously described. Further, once the bucket output 120 for each of the data buckets 110 is sorted as a single record, reducer 122 may output the sorted record as final output 126. As set forth herein, final output 126 may comprise data input 102, such as graph data, sorted and reduced by mapper 106 and reducer 122, respectively.

FIG. 2 illustrates a diagram for the sorting and processing of data utilizing one or more data buckets. In one embodiment, data input 202 is partitioned into one or more extracted data 204. Data input 202 may be any type of data, such as graph data. In an embodiment in which data input 202 is graph data, the graph data may be partitioned into one or more graph records. As stated above with respect to FIG. 1, each graph record may have one or more source nodes and a plurality of destination nodes associated with a particular source node.

In various embodiments, extracted data 204 is directed into mapper 206. Mapper 206 may be embodied in hardware, software, or a combination thereof. In the above embodiment, mapper 206 may include bucket judgment 208 and a plurality of data buckets 210. As shown, data buckets 210A-D may serve as example data buckets of data buckets 210. As mentioned previously in relation to FIG. 1, each of data buckets 210, including data buckets 210A-D, may include a master container and a slave container. In response to extracted data 204 being input into mapper 206, bucket judgment 208 may direct or distribute the extracted data 204 into one of data buckets 210. That is, in this embodiment, extracted data 204 may be distributed into one of data buckets 210A-D.

In the above embodiment, extracted data 204 may be divided into master data items 116 and slave data items 118 associated with a particular master data item 116 once the extracted data is distributed into one of data buckets 210. For any particular one of data buckets 210, the master data items 116 may be held in the master container and the corresponding slave data items 118 may be held in the slave container. Furthermore, as described with respect to FIG. 1, as each data bucket 210 is sorted and/or processed by mapper 206, the master data items 116 may be sorted without sorting the associated slave data items 118. In some embodiments, as each master data item 116 has control over, or at least is aware of, its associated slave data items 118, the interrelated data items in a particular data bucket 210 may be sorted by sorting just the master data items 116. Sorting the master data items 116 without sorting the corresponding slave data items 118 may cause the sorting of a data bucket 210 to be more efficient. Subsequently, the master data items 116 and corresponding slave data items 118 may be merged into a single record and output by one of data buckets 210.

In an example embodiment, as additional extracted data 204 is distributed into data buckets 210, each of data buckets 210 may reach a memory limit or capacity. The memory limit for each data bucket 210 may be based on the total number of data buckets and/or the total memory of the machine or computing device in which the data buckets are embodied. In this embodiment, when each of data buckets 210A-D reaches their respective memory limits, data buckets 210A-D may output the data as a temporary file 212. However, before outputting the data as a temporary file 212, data buckets 210A-D may sort the master data items 116 and the associated slave data items 118 utilizing the process described above. Upon outputting the master data items 116 and the associated slave data items 118 as a temporary file 212, each of data buckets 210A-D may receive additional extracted data 204 from bucket judgment 208. Data buckets 210A-D may then repeat the above process and output additional data as a second temporary file upon reaching a memory capacity. The above process may continue until no more data is being distributed into data buckets 210A-D. Therefore, the memory capacity for a particular data bucket 210 determines the number of temporary files 212 output by that data bucket 210.

That is, in the above embodiment, extracted data 204 may be distributed to one of data buckets 210, divided into master data items 116 and associated slave data items 118, the master data items 116 are sorted by one of data buckets 210 when the data bucket 210 reaches a maximum memory capacity, the master data items 116 and associated slave data items 118 are merged into a single record, and the single record is output as a temporary file 212.

In various embodiments, provided that one of data buckets 210A-D has output more than one temporary file 212, the temporary files 212 may be merged into a single file representing a final output for one of data buckets 210A-D. Further, as described with respect to FIG. 1, the single records output for each data bucket 210A-D may be sorted and merged in order to generate a final output for each of data buckets 210. The number of data buckets shown in FIG. 2 (data buckets 210A-D) is for illustration purposes only and it is contemplated that more or less data buckets 210 may be present.

As stated previously, in various embodiments, data input 202 may be a particular type of graph data. The graph data may be divided into one or more graph records having source nodes and associated destination nodes. However, for large graph data sets, the graph data may be partitioned with high locality property. That is, for each partition, the source nodes and the associated destination nodes of the graph data may be highly overlapped. As a result, a particular data bucket, such as data bucket 210A, may receive more and/or larger graph records than other data buckets, such as data buckets 210B-C. In other words, there may be an unbalanced amount of graph data distributed into different data buckets 210A-D. In this case, assuming that data buckets 210A-D each had the same memory capacity, data bucket 210A would likely reach its memory capacity prior to data buckets 210B-D and, therefore, generate a greater number of temporary files 212 than data buckets 210B-C. Furthermore, in large scale data processing, generating, processing, and/or sorting a great number of files may cause significant system performance inefficiencies, such as being unable to open a large number of files at one time.

To reduce the number of temporary files 212 generated by a data bucket 210 that receives larger and/or more graph data, the memory capacity of that data bucket 210 may be adjusted. In one embodiment, each of data buckets 210 may have the same storage capacity and may be designated as having a first data bucket size. There may also be a category of data buckets that have a larger storage capacity, which may be designated as data buckets having a second data bucket size that is greater than the first data bucket size. In some embodiments, the number of data buckets with a larger storage capacity may be limited based on the number of data buckets already having the second data bucket size and/or a total amount of available memory of the system. For example, there may be a quota representing a total number of data buckets having a second data bucket size that the system can accommodate. It is also contemplated that additional categories of data buckets may exist, such as data buckets having a third size, data buckets having a fourth size, and so forth.

In various embodiments, a computing device may track the number of times a particular data bucket 210 having a first data bucket size reaches its memory capacity. In one embodiment, the above tracking may be performed by a MapReduce engine of the computing device. As stated above, once a data bucket 210 reaches its memory capacity, the data bucket 210 may output a temporary file 212. Upon the data bucket 210 reaching its memory capacity a predetermined number of times, that data bucket 210 may be promoted to a data bucket having a second data bucket size that is greater than the first data bucket size. In some instances, the data bucket 210 having a first data bucket size may be promoted into a data bucket having a second data bucket size if the memory capacity of the data bucket 210 is reached a predetermined number of times in a predefined time period. In above embodiment, the data bucket having a second data bucket size has a greater amount of memory than the data bucket 210 having a first data bucket size.

In various embodiments, promoting a data bucket 210 having a first data bucket size to a data bucket having a second data bucket size may be performed automatically as the data bucket 210 having a first data bucket size reaches its memory capacity a predetermined number of times. Furthermore, the promotion may also be based on whether a quota of data buckets having a second data bucket size has been reached. If not, the data bucket 210 may be promoted to a data bucket having a second data bucket size. However, if the above quota has been reached, there may not be enough memory to promote the data bucket 210 to a data bucket having a second data bucket size. In this case, the data bucket 210 will remain as a data bucket having the first data bucket size. As a result of the promotion, the data bucket 210 will have a larger memory capacity and may therefore generate a reduced amount of temporary files 122.

FIG. 2 further illustrates an example of the process described immediately above. In an example embodiment, data buckets 210 include at least data buckets 210A-D. As shown, data buckets 210A-210D are approximately the same size and, therefore, may be designated as data buckets having a first data bucket size. In other words, data buckets 210A-D each has approximately the same amount of memory. In this embodiment, as data is distributed into each of data buckets 210A-D, data buckets 210A-210D generate one or more temporary files 212 in the manner previously described. Initially, FIG. 2 illustrates that data bucket 210A has output three temporary files 212, data bucket 210B has output two temporary files 212, and each of data bucket 210C and data bucket 210D has output one temporary file 212. That is, data bucket 210A has reached its memory capacity three times, data bucket 210B has reached its memory capacity two times, and data buckets 210C and 210D have each reached their respective memory capacities one time.

In the above embodiment, the system will promote a data bucket 210 having a first data bucket size to a data bucket having a second data bucket size if a particular data bucket 210 reaches its memory capacity three times. However, in other embodiments, it is contemplated that such a promotion may also occur if the number of times of reaching memory capacity is either less than or greater than three times. As shown, since data bucket 210A has output three temporary files 212, it is detected that data bucket 210A has reached its memory capacity three times. Therefore, data bucket 210A is promoted to a data bucket having a second data bucket size, which is greater than data buckets 210B-C, which each have a first data bucket size.

Data bucket 210A may also be promoted to a data bucket of a second data bucket size under limited circumstances. Such circumstances include promoting data bucket 210A when it reaches its memory capacity a predetermined number of times in a predefined time period and/or when there is available memory for such a promotion. In addition, the promotion of data bucket 210A from a first data bucket size to a second data bucket size may be performed either automatically or manually upon reaching its memory capacity a predetermined number of times. Furthermore, as shown in FIG. 2, data buckets 210B-D will remain as data buckets having a first data bucket size as they each have not reached a memory capacity three different times.

FIG. 2 further illustrates data buckets 210A-D in which data bucket 210A has a second data bucket size greater than the first data bucket size. On the contrary, data buckets 210B-D each have a first data bucket size. In this embodiment, since data bucket 210A has been promoted to a data bucket having a second data bucket size, it now may have a greater memory capacity than data buckets 210B-D. Accordingly, data bucket 210A may generate temporary files 212 that are larger than temporary files output by data buckets 210B-D. Further, data bucket 210A may generate fewer temporary files 212 than when data bucket 210A had a first data bucket size. Therefore, once a data bucket 210 has been promoted to a second, larger data bucket size, the amount of output temporary files 212 may decrease. Consequently, fewer temporary files 212 will need to be merged in a subsequent sorting.

FIG. 3 illustrates a process for sorting and processing graph data. Initially, graph data may be partitioned into multiple graph partitions, such as graph partition 304 and graph partition 316. For the purposes of this embodiment, graph partition 304 and graph partition 316 may be any type of graph data. Moreover graph partition 304 and graph partition 316 may each be comprised of source nodes and one or more destination nodes each being associated with a particular source node. Further, the one or more destination nodes may also be associated with more than one source node.

In an example embodiment, with respect to computer device 302, mapper 306 may divide graph partition 304 into a plurality of records 308. Each record 308, such as records 308A, 308B, 308C, and 308N, relates to destination nodes for a different graph partition. For instance, record 308A refers to destination nodes corresponding to one or more source nodes in graph partition 304, record 308B refers to destination nodes corresponding to one or more source nodes in graph partition 316, and records 308C and 308N correspond to one or more source nodes for graph partitions not displayed in FIG. 3. Record 308N is shown to indicate that any number of records and corresponding graph partitions may be processed by mapper 306.

Similarly, with respect to computing device 314, mapper 318 may divide graph partition 316 into a plurality of records 320. Records 320A, 320B, 320C, and 320N each relate to destination nodes for a different graph partition. As with records 308N, record 320N illustrates that any number of records may be included in computing device 314. In this embodiment, record 320A refers to destination nodes corresponding to the one or more source nodes in graph partition 304, record 320B refers to destination nodes corresponding to the one or more source nodes in graph partition 316, and records 320C and 320N correspond to the one or more source nodes for graph partitions not shown in FIG. 3.

Subsequently, records having destination nodes corresponding to a source node for a particular graph partition are distributed to the same reducer. In other words, destination nodes associated with the same source nodes may be merged together into a resulting data record. For instance, as stated above, records 308A and 320A both contain destination nodes relating to one or more source nodes corresponding to graph partition 304. Therefore, records 308A and 320A may be distributed to the same reducer, such as reducer 310. In response, reducer 310 may merge records 308A and 320A to generate a single file represented by result 312. Result 312 will contain source nodes and associated destination nodes for graph partition 304. Likewise, records 308B and 320B both contain destination nodes relating to one or more source node corresponding to graph partition 316. Accordingly, records 308B and 320B may be distributed to a different reducer, such as reducer 322. Reducer 322 may then merge records 308B and 320B to generate a single file represented by result 324. Result 324 will contain one or more source nodes and associated destination nodes for graph partition 316. Furthermore, a process similar to the above may also be conducted for records 308C and 320C, and so forth. Therefore, each result, such as results 312 and 324, contains source nodes from a graph partition and its associated destination nodes.

FIGS. 4-6 describe various example processes for processing and/or sorting various types of data. The example processes are described in the context of the environment of FIGS. 1-3, but are not limited to those environments. The order in which the operations are described in each example process is not intended to be construed as a limitation, and any number of the described blocks can be combined in any order and/or in parallel to implement each process. Moreover, the blocks in the FIGS. 4-6 may be operations that can be implemented in hardware, software, and a combination thereof. In the context of software, the blocks represent computer-executable instructions that, when executed by one or more processors, cause one or more processors to perform the recited operations. Generally, the computer-executable instructions may include routines, programs, objects, components, data structures, and the like that cause the particular functions to be performed or particular abstract data types to be implemented.

FIG. 4 is flowchart illustrating a method of sorting and/or processing a plurality of interrelated data items. More particularly, block 402 illustrates directing a plurality of interrelated data items into one of a plurality of data buckets. The plurality of interrelated data items may comprise data input 102 and/or extracted data 104. Moreover, the interrelated data items may be any type of data including, for example, graph data. The interrelated items may also be distributed to one of data buckets 110 by mapper 106 and/or bucket judgment 108. Further, each of data buckets 110 may include both a master container 112 to hold master data items 116 and a slave container to hold slave data items 118 associated with one or more master data items 116.

Block 404 illustrates partitioning the plurality of interrelated data items into master data items and slave data items. Moreover, the above master data items and the slave data items may comprise master data items 116 and associated slave data items 118, respectively. Provided that the interrelated data items comprise graph data, the master data items 116 may correspond to source nodes and the associated slave data items 118 may correspond to destination nodes associated with the source nodes.

Block 406 illustrates distributing the master data items into a master container of the data bucket and the slave data items into a slave container in the data bucket. In particular, once distributed into one of data buckets 110, master data items 116 may be distributed into master container 112 and the associated slave data items 118 may be distributed into slave container 114. In one embodiment, the distributing may be performed by a MapReduce engine of a computing device.

Block 408 illustrates sorting the interrelated data items by sorting the master data items. More particularly, as a particular master data item 116 may either have control over or at least be aware of its associated slave data items 118, the master data items 116 held in the master container 112 of each data bucket 110 may be sorted without sorting the slave data items 118 associated with that master data item 116. Sorting the interrelated data items by sorting just the master data items 116 may decrease the time required for sorting and, therefore, increase efficiency.

Block 410 illustrates outputting the master data items and associated slave data items for a particular one of the data buckets as a temporary file. Moreover, the master data items 116 and associated slave data items 118 for a particular one of data buckets 110 may be output as a temporary file, such as bucket output 120, in response to the data bucket 110 reaching a maximum storage capacity. That is, as each data bucket 110 receives data and reaches a maximum storage capacity, the sorted data, which includes the master data items 116 and the associated slave data items 118, may be output as a temporary file for that data bucket 110. Each data bucket 110 may sort and output one or more temporary files based on the number of times each data bucket 110 reaches a maximum storage capacity.

Block 412 illustrates reducing the master data items and the associated slave data items from each of the data buckets into a single file for output. As described above, the temporary files may be referred to as bucket output 120. Further, once each data bucket 110 has sorted and output its stored data as a temporary file, the temporary files may be distributed to reducer 122, which contains temporary data bucket 124. The temporary files, or bucket output 120, may then be distributed into temporary data bucket 124.

In various embodiments, Temporary data bucket 124 may sort the master data items 116 and the associated slave data items 118 by sorting the master data items 116 without sorting the associated slave data items 118. Following such sorting, the temporary data bucket 124 may merge the temporary files output by each data bucket 110 into a single file for output. The single file may be referred to as final output 126.

FIG. 5 is flowchart illustrating tracking a number of times that a data bucket having a first data bucket size reaches a memory capacity. FIG. 5 further illustrates promoting the data bucket to a second data bucket size that is greater than the first data bucket size based on the number of times the data bucket reaches its memory capacity.

Block 502 illustrates tracking a number of times that a data bucket having a first data bucket size reaches a memory capacity. In one embodiment the tracking may be performed by a MapReduce engine of a computing device. More particularly, data bucket may be any one of data buckets 210A-210D. In one embodiment, each of data buckets 210A-210D may have a first data bucket size and a memory limit. The memory limit may be based on the total memory available for a particular computing device. Moreover, as each of data buckets 210A-D may output a temporary file 212 when its maximum memory capacity is reached, tracking the number of times one of data buckets 210A-D reaches a memory capacity may be determined by tracking the number of temporary files 212 output for each data bucket 210.

Block 504 illustrates outputting a temporary file when the data bucket reaches the memory capacity. As stated above, data buckets 210A-D may output one or more temporary files 212 when any one of data buckets 210A-D reaches its maximum memory capacity.

Block 506 illustrates promoting the data bucket to a second data bucket size that is greater than the first data bucket size based on the number of times. For example, data bucket 210A having a first data bucket size may be promoted to a data bucket having a second data bucket size that is greater than the first data bucket size. The promoting may be based on a predetermined number of times any one of data buckets 210A-D reaches its memory capacity. Further, in order for a particular data bucket 210 to be promoted to a greater data bucket size, the data bucket 210 may need to reach its memory capacity a predetermined number of times within a predefined time period. The promoting set forth in block 506 may also be based on a quota defined as a number of data buckets having a second data bucket size that are available or be based on the total memory available for a particular system or computing device. Promoting a data bucket 210 to a data bucket having a greater data bucket size may also reduce the number of temporary files 212 output by that data bucket.

Block 508 illustrates sorting data in the data bucket prior to outputting the temporary file. As mentioned previously with respect to FIGS. 1, 2, and 4, interrelated data items, such as master data items 116 and associated slave data items 118, may be sorted prior to outputting the master data items 116 and the associated slave data items 118 to a temporary file 212.

Block 510 illustrates merging the temporary file with a plurality of additional temporary files output by one or more data buckets. As stated above, as each of data buckets 210A-D reaches a maximum storage capacity, each data bucket may output a temporary file 212. Moreover, these temporary files 212 may be merged together. For instance, the temporary file(s) 212 output by data bucket 210A may be merged with the temporary files 212 output by data buckets 210B-D.

Block 512 illustrates generating a single file including the temporary file and the plurality of additional temporary files for output to a storage device. As mentioned above with respect to block 510, temporary files 212 output by each of data buckets 210 may be merged together. A single file or record may then be generated that includes the temporary files 212 from each data bucket 210. For example, provided that the temporary files 212 output by data buckets 210A-D were previously merged, the temporary files 212 for data buckets 210A-D may be output as a single file to a storage device. Such a file may comprise the master data items 116 and the associated slave data items 118 from each temporary file 212 output by data buckets 210A-D. Further, the storage device may be any type of device having memory to store the single file.

FIG. 6 is flowchart illustrating sorting graph data having source nodes and associated destination nodes. Block 602 illustrates partitioning a plurality of graph records into source nodes and associated destination nodes. In one embodiment, a particular source node is associated with one or more destination nodes.

Block 604 illustrates distributing the source nodes into a master container of a data bucket and the destination nodes into a slave container of the data bucket. In one embodiment, the distributing may be performed by a MapReduce engine of a computing device. More particularly, the source nodes may be distributed into master container 112 in a data bucket 110 and the associated destination nodes may be distributed into slave container 114 of the same data bucket 110. In one embodiment, each source node held in the master container 112 is associated with one or more associated destination nodes held in the slave container 114.

Block 606 illustrates sorting the graph records by sorting the source nodes without sorting the associated destination nodes. In various embodiments, as a particular source node either has control over, or at least is aware of, the destination nodes associated with that source node, both the source nodes and the associated nodes may be sorted by sorting just the source nodes. As shown, sorting of the source nodes of data bucket 110 may occur in the master container 112.

Further, in response to sorting the source nodes, one of data bucket 110 may output the source nodes and the associated destination nodes as one or more temporary files 212 in response to reaching a memory capacity of the data bucket 110. For example, once data bucket 210A reaches its memory capacity, data bucket 210A may output the source nodes and associated destination nodes as a temporary file 212. Moreover, data bucket 210A may continue to output one or more temporary files 212 if data bucket 210A reaches its maximum memory capacity one or more times. Subsequently, provided that a particular data bucket 210, such as data bucket 210A, output more than one temporary file 212, the one or more temporary files 212 may be merged to generate a single record for output by the data bucket 210 to a storage device. For instance, as shown in FIG. 2, data bucket 210A has output three temporary files 212. Therefore, the three temporary files 212 may be merged together to generate a single record for data bucket 210A and the single record may be output to a storage device.

Block 608 illustrates reducing the source nodes and the associated destination nodes from each of the data buckets into a single file for output. More particularly, the source nodes and associated destination nodes included in temporary files 212 output by data buckets 210A-D may be reduced to a single file for output. Accordingly, the single file may include the source nodes and associated destination nodes for each of the temporary files 212 output by data buckets 210. Moreover, as stated above, the single file for output may be sorted based on source node identifiers.

Block 610 illustrates reducing the single record for each of the data buckets into a single record for output. With respect to FIG. 1, the files output by each of data buckets 110 may be reduced to a single record that comprises the source nodes and the associated destination nodes for data buckets 110. Moreover, the single record for output may be referred to as bucket output 120 and the reducing may be performed by reducer 122.

In various embodiments, the reducing may comprise partitioning the single record for each of data buckets 110 into source nodes and destination nodes. As mentioned previously, each destination node may be associated with at least one source node. Subsequently, the source nodes may be distributed into a master container of a data bucket, such as temporary data bucket 124, and the destination nodes may be distributed into a slave container of temporary data bucket 124. Therefore, in the above embodiment, the master container of temporary data bucket 124 may hold the source nodes output by data buckets 110 and the slave container of temporary data bucket 124 may hold the destination nodes associated with the source nodes output by data buckets 110.

In addition, the single record may be sorted by sorting the source nodes held in master container of temporary data bucket 124. In one embodiment, temporary data bucket 124 may sort the single record by sorting the source nodes held in the master container without independently sorting the destination nodes held in the slave container. In this embodiment, the temporary data bucket 124 may sort the single record more efficiently by sorting just the source nodes since it may take additional time to also independently sort the associated destination nodes. Upon the single record being sorted, the temporary data bucket 124 may reduce the source nodes and the associated destination nodes held in the master container and the slave container, respectively, as a final output 126 for output. In this embodiment, final output 126 comprises the sorted source nodes and associated destination nodes from each of data buckets 110.

Block 612 illustrates tracking a number of times the data bucket reaches a memory capacity. In one embodiment, as a data bucket 210 will output a temporary file 212 upon its memory limit being reached, the number of times a data bucket 210 reaches its memory capacity may be determined by tracking the number of temporary files 212 output by a particular data bucket 210. For instance, one could determine that data bucket 210A has reached its memory capacity three different instances since data bucket 210A has output three temporary files 212.

Block 614 illustrates promoting the data bucket to a data bucket having a greater data bucket size based on the number of times in a predefined time period. Initially, each data bucket 210 may have a first data bucket size. However, if one of data buckets 210 reaches a maximum memory limit a predetermined number of times in a predefined period of time, that data bucket may be promoted to a data bucket having a second data bucket size that is greater than the first data bucket size. An increase in data bucket size may cause that particular data bucket to output larger, but a reduced number, of temporary files 212.

In an example embodiment, data bucket 210A may be promoted from a data bucket having a first data bucket size to a data bucket having a second data bucket size that is greater than the first data bucket size. In this embodiment, the predetermined number of times is three. As shown, data bucket 210A has output three temporary files 212, which indicates that data bucket 210A has reached its memory capacity three different times. Therefore, after being promoted to a data bucket having a second size, data bucket 210 outputs larger but possibly fewer temporary files 212. Since data buckets 210B-D have each output less than three temporary files 212, data buckets 210B-D have not reached their respective memory limits the predetermined number of times. Accordingly, data buckets 210B-D will continue to have a first data bucket size.

FIG. 7 illustrates a representative computing device 700 that may implement the sorting of various types of data, such as graph data, in accordance with various embodiments. For example, the computing device 700 may be implemented as any of the computing devices described previously. However, it will be readily appreciated that the techniques and mechanisms may be implemented in other computing devices, systems, and environments. The computing device 700 shown in FIG. 7 is only one example of a computing device and is not intended to suggest any limitation as to the scope of use or functionality of any computing device utilized to perform the processes and/or procedures described above.

In at least one configuration, computing device 700 includes at least one processing unit 702 and system memory 704. Processing unit 702 may execute one or more modules and/or processes to cause computing device 700 to perform a variety of functions. In some embodiments, the processing unit 702 is a central processing unit (CPU), a graphics processing unit (GPU), both CPU and GPU, or other processing units or components known in the art.

Depending on the exact configuration and type of computing device, system memory 704 may be volatile (such as RAM), non-volatile (such as ROM, flash memory, miniature hard drive, memory card, or the like) or some combination thereof. System memory 704 may include an operating system 706, one or more program modules 708, and may include program data 710. The computing device 700 is of a very basic configuration demarcated by a dashed line 712. Again, a terminal may have fewer components but may interact with a computing device that may have such a basic configuration.

Computing device 700 may have additional features and/or functionality. For example, computing device 700 may also include additional data storage devices (removable and/or non-removable) such as, for example, magnetic disks, optical disks, or tape. Such additional storage is illustrated in FIG. 7 by removable storage 714 and non-removable storage 716. Computer storage media may include volatile and nonvolatile, removable, and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data. System memory 704, removable storage 714 and non-removable storage 716 are all examples of computer storage media. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD), or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by computing device 700. Any such computer storage media may be part of computing device 700. Computing device 700 may also have input device(s) 718 such as a keyboard, a mouse, a pen, a voice input device, a touch input device, etc. Output device(s) 720, such as a display, speakers, a printer, etc. may also be included.

Computing device 700 may also contain communication connections 722 that allow the device to communicate with other computing devices 724, such as over a network. These networks may include wired networks as well as wireless networks. Communication connections 722 are some examples of communication media. Communication media may typically be embodied by computer readable instructions, data structures, program modules, etc.

It is appreciated that the illustrated computing device 700 is only one example of a suitable device and is not intended to suggest any limitation as to the scope of use or functionality of the various embodiments described. Other well-known computing devices, systems, environments and/or configurations that may be suitable for use with the embodiments include, but are not limited to personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-base systems, set top boxes, game consoles, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and/or the like.

The implementation and administration of a shared resource computing environment on a single computing device may enable multiple computer users to concurrently collaborate on the same computing task or share in the same computing experience without reliance on networking hardware such as, but not limited to, network interface cards, hubs, routers, servers, bridges, switches, and other components commonly associated with communications over the Internet, as well without reliance on the software applications and protocols for communication over the Internet.

Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described. Rather, the specific features and acts are disclosed as exemplary forms of implementing the claims. 

1. A method comprising: partitioning, by a computing device, a plurality of interrelated data items into master data items and slave data items, each master data item having an association with one or more slave data items; and distributing, by the computing device, the master data items into a master container of a data bucket of a MapReduce engine and the slave data items into a slave container of the data bucket to enable operations on the interrelated data based on the master data items.
 2. The method as recited in claim 1, further comprising directing the plurality of interrelated data items into one of a plurality of data buckets, each data bucket including the master container and the slave container.
 3. The method as recited in claim 1, wherein the operations comprise: sorting the interrelated data items by sorting the master data items in the master container of each of the data buckets; and reducing the master data items and the associated slave data items from each of the data buckets into a single file for output.
 4. The method as recited in claim 3, wherein the sorting the interrelated data items includes sorting the master data items without sorting the associated slave data items.
 5. The method as recited in claim 1, wherein the interrelated data items comprise a graph record.
 6. The method as recited in claim 1, wherein each master data item corresponds to a source node and each slave data item corresponds to a destination node.
 7. The method as recited in claim 1, wherein the master container comprises one or more records each representing a wrapper for a particular master data item, the wrapper including an index and length of the one or more slave data items associated with the particular master data item.
 8. The method as recited in claim 1, further comprising outputting master data items and associated slave data items for a particular one of the data buckets to a temporary file in response to the data bucket reaching maximum storage capacity.
 9. A method comprising: tracking, by a computing device, a number of times that a data bucket of a MapReduce engine having a first data bucket size reaches a memory capacity, the data bucket outputting a temporary file when it reaches the memory capacity; and promoting, by the computing device, the data bucket to a second data bucket size that is greater than the first data bucket size to reduce an amount of temporary files output from the data bucket, the promoting being based on the number of times.
 10. The method as recited in claim 9, further comprising sorting data in the data bucket prior to outputting the data to a temporary file.
 11. The method as recited in claim 9 wherein the promoting is based on a quota defining a number of times that the memory capacity is reached in a given time frame as a criteria for promotion.
 12. The method as recited in claim 9, further comprising: merging the temporary file with a plurality of additional temporary files output by one or more data buckets; and generating a single file including the temporary file and the plurality of additional temporary files for output to a storage device.
 13. One or more computer-readable media having computer-executable instructions that, when executed by one or more processors, cause a computer to: partition a plurality of graph records into source nodes and destination nodes, each source node having an association with one or more destination nodes; and distribute the source nodes into a master container of a data bucket of a MapReduce engine and the destination nodes into a slave container of the data bucket to enable operations on the graph records based on the source nodes, the operations including: sorting the graph records by sorting the source nodes in the master container of each of the data buckets without sorting the associated destination nodes; and reducing the source nodes and the associated destination nodes from each of the data buckets into a single file for output.
 14. The one or more computer-readable media as recited in claim 13, wherein the computer-executable instructions, when executed by the one or more processors, further cause the computer to: output the source nodes and the associated destination nodes to one or more temporary files in response to reaching a memory capacity of the data bucket; and merge the one or more temporary files to generate a single record for output by the data bucket to a storage device.
 15. The one or more computer-readable media as recited in claim 13, wherein the computer-executable instructions, when executed by the one or more processors, further cause the computer to: partition the single record for each of the data buckets into the source nodes and the destination nodes; distribute the source nodes into a master container of a temporary data bucket and the destination nodes into a slave container of the temporary data bucket; sort the single records by sorting the source nodes in the master container of the temporary bucket; and reducing the sources nodes and the destination nodes from the temporary data bucket to a single record for output.
 16. The one or more computer-readable media as recited in claim 13, wherein the computer-executable instructions, when executed by the one or more processors, further cause the computer to: track a number of times the data bucket reaches a memory capacity; and promote the data bucket to a data bucket having a greater data bucket size based on the number of times in a predefined time period.
 17. The one or more computer-readable media as recited in claim 16, wherein a number of temporary files generated by the data bucket depends upon a size of the data bucket.
 18. The one or more computer-readable media as recited in claim 16, wherein the promoting is based on a quota defining a total available amount of memory.
 19. The one or more computer-readable media as recited in claim 16, wherein the promoting is performed automatically.
 20. The one or more computer-readable media as recited in claim 13, wherein the single file for output is sorted based on source node identifiers. 